package models

import "reflect"

// PaginationQuery 用于接收分页和查询条件的参数
type PaginationQuery struct {
	Page     int `json:"page"`
	PageSize int `json:"page_size"`
}

// BaseResultDto
type BaseResultDto[T any] struct {
	Flag bool   `json:"flag"`
	Data T      `json:"data"`
	Msg  string `json:"msg"`
}

// CompareStructs 使用反射比较两个结构体是否相等
func CompareStructs(a, b interface{}) bool {
	if a == nil || b == nil {
		return a == b
	}
	aVal := reflect.ValueOf(a)
	bVal := reflect.ValueOf(b)
	if aVal.Type() != bVal.Type() {
		return false
	}
	if aVal.Kind() == reflect.Ptr {
		aVal = aVal.Elem()
		bVal = bVal.Elem()
	}
	if !aVal.IsValid() || !bVal.IsValid() {
		return false
	}
	if !reflect.DeepEqual(aVal.Interface(), bVal.Interface()) {
		return false
	}
	return true
}
